<?php
!defined('P_W') && exit('Forbidden');

/**
 * 举报DAO类
 * @author bingbing.renbb@2010-8-24
 *
 */
class PW_House_ReportDB extends BaseDB {
	/**
	 * @var string	$_tableName 数据表名称
	 * @var integer $_perPage	每页显示行数
	 * @var string  $_primaryKey 主键名称
	 */
	var $_tableName = 'pw_house_report';
	var $_perPage = 20;
	var $_primaryKey = 'reportid';
		
	/**
	 * 新增一条举报记录
	 * @param	array	$data	各字段的值
	 * @return	mixed			插入的ID
	 */
	function addReport($data) {
		$data = $this->_checkData($data);
		if (empty($data)) return NULL;	
		$_sql = 'INSERT INTO ' . $this->_tableName . ' (uid, username, reason, handle, type, id, time) VALUES (' . $this->_getImplodeString($data) . ')';
		$this->_db->update($_sql);
		return $this->_db->insert_id();	
	}
	
	/**
	 * 查询一个房源是否已经被举报过
	 * @param $houseid
	 */
	function checkReport($houseid, $type) {
		if (!is_numeric($houseid) || !is_numeric($type)) return NULL;
		$_sql = 'SELECT reportid FROM ' . $this->_tableName . ' WHERE id = ' . $this->_addSlashes($houseid) . ' AND type = ' . $this->_addSlashes($type);
		$result = $this->_db->get_value($_sql);
		return $result;
	}
	
	/**
	 * 删除一条举报记录
	 * @param	mixed	$id 	要删除的记录ID
	 * @return  mixed			影响的行数
	 */
	function deleteReport($id) {
		if (!is_numeric($id)) return NULL;
		$_sql = 'DELETE FROM ' . $this->_tableName . ' WHERE reportid = ' . $this->_addSlashes($id);
		$this->_db->update($_sql);
		return $this->_db->affected_rows();
	}
	
	/**
	 * 删除多条举报记录
	 * @param	mixed	$ids 	要删除的记录ID
	 * @return  mixed			影响的行数
	 */
	function deleteReports($ids) {
		if (!S::isArray($ids)) return NULL;
		$_sql = 'DELETE FROM ' . $this->_tableName . ' WHERE reportid IN (' . $this->_getImplodeString($ids) . ')';
		$this->_db->update($_sql);
		return $this->_db->affected_rows();
	}
	
	/**
	 * 标记一条举报记录为已处理
	 * @param	mixed	$id 	要更新的记录ID
	 * @return  integer 		影响的行数
	 */
	function updateReport($id) {
		if (!is_numeric($id)) return NULL;
		$_sql = 'UPDATE ' . $this->_tableName . ' SET handle = 1 WHERE reportid =' . $this->_addSlashes($id);
		$this->_db->update($_sql);
		return $this->_db->affected_rows();
	}
	
	/**
	 * 标记多条举报记录为已处理
	 * @param	mixed	$ids 	要更新的记录ID
	 * @return  integer 		影响的行数
	 */
	function updateReports($ids) {
		if (!S::isArray($ids)) return NULL;
		$_sql = 'UPDATE ' . $this->_tableName . ' SET handle = 1 WHERE reportid IN (' . $this->_getImplodeString($ids) . ')';
		$this->_db->update($_sql);
		return $this->_db->affected_rows();
	}
	
	/**
	 * 取得举报记录,有分页
	 * @param	integer	$handle	0为未处理，1为已处理
	 * @param	integer	$type	0为二手房，1为租房
	 * @param	integer	$page	分页中的第几页
	 * @return	array	$result	查询结果 
	 */
	function getReports($handle, $type, $page) {
		if (!is_numeric($handle) || !is_numeric($type) || !is_numeric($page)) return NULL;
		$result = array();
		$page = (intval($page) > 1) ? intval($page) - 1 : 0;
		$_sql = 'SELECT reportid, uid, username, reason, type, id, time FROM ' . $this->_tableName . ' WHERE type = ' . $this->_addSlashes($type) . ' and handle = ' . $this->_addSlashes($handle) . ' ORDER BY time DESC' . $this->_Limit($page*$this->_perPage, $this->_perPage);
		$queryResult = $this->_db->query($_sql);
		$result = $this->_getAllResultFromQuery($queryResult);
		return $result;	
	}
	

	/**
	 * 根据是否已经处理取得举报记录,有分页
	 * @param	integer	$handle	0为未处理，1为已处理
	 * @param	integer	$page	分页中的第几页
	 * @return	array	$result	查询结果 
	 */
	function getReportsByHandle($handle, $page) {
		if (!is_numeric($handle) || !is_numeric($page)) return NULL;
		$result = array();
		$page = (intval($page) > 1) ? intval($page) - 1 : 0;
		$_sql = 'SELECT reportid, uid, username, reason, type, id, time FROM ' . $this->_tableName . ' WHERE handle = ' . $this->_addSlashes($handle) . ' ORDER BY time DESC' . $this->_Limit($page*$this->_perPage, $this->_perPage);
		$queryResult = $this->_db->query($_sql);
		$result = $this->_getAllResultFromQuery($queryResult);
		return $result;	
	}
	
	/**
	 * 根据多个id取得举报记录
	 * @param	array $ids 举报id
	 * @return	array	$result	查询结果 
	 */
	function getReportsByIds($ids) {
		if(!$ids) return array();
		$ids = is_array($ids) ? $ids : array($ids);
		$_sql = 'SELECT reportid, uid, username, reason, type, id, time FROM ' . $this->_tableName . ' WHERE  reportid IN (' . $this->_getImplodeString($ids) . ') ORDER BY time DESC ';
		$queryResult = $this->_db->query($_sql);
		$result = $this->_getAllResultFromQuery($queryResult);
		return $result;	
	}
	
	/**
	 * 根据id取得举报记录
	 * @param	integer	$id	记录的ID
	 * @return	array		查询结果 
	 */
	function getReportsById($id) {
		if (!is_numeric($id)) return NULL;
		return $this->_get($id,'reportid, uid, username, reason, type, id, time');
	}
	
	/**
	 * 根据是否已经处理和举报类型统计总数
	 * @param	integer	$handle	0为未处理，1为已处理
	 * @param	integer	$type	0为二手房，1为租房
	 * @return	integer	$number	记录数 
	 */
	function count($handle, $type) {
		if (!is_numeric($handle) || !is_numeric($type)) return NULL;
		$number = 0;
		$_sql = 'SELECT COUNT(*) AS sum FROM ' . $this->_tableName . ' WHERE handle = ' . $this->_addSlashes($handle) . ' and type = ' . $this->_addSlashes($type);
		$number = $this->_db->get_value($_sql);
		return $number;
	}
	
	/**
	 * 根据是否已经处理统计总数
	 * @param	integer	$handle	0为未处理，1为已处理
	 * @return	integer	$number	记录数 
	 */
	function countByHandle($handle) {
		if (!is_numeric($handle)) return NULL;
		$number = 0;
		$_sql = 'SELECT COUNT(*) AS sum FROM ' . $this->_tableName . ' WHERE handle = ' . $this->_addSlashes($handle);
		$number = $this->_db->get_value($_sql);
		return $number;
	}
	
	/**
	 * 过滤数据
	 * @param	array	$data	各字段值
	 * @return	array	过滤后的数据 
	 */
	function _checkData($data) {
		if (!S::isArray($data)) return array();
		$allowFields = array('uid', 'username', 'reason', 'handle', 'type', 'id', 'time');
		$data = $this->_checkAllowField($data, $allowFields);
		$data['reason'] = S::htmlEscape($data['reason']);
		return $data;
	}
}
?>